package com.icinfo.cloud.provider.punish.ucase.caseregister.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.icinfo.cloud.common.core.Validator.BaseGroup;
import com.icinfo.cloud.provider.punish.app.enums.AppCaseConvertTemporaryEnum;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.AppendixDto;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;

/**
 * 【V2.0.0】描述：立案登记保存dto
 *
 * @author shishengyao
 * @description
 * @date 2022/5/10
 */
@Data
public class CaseRegisterSaveDto implements Serializable {
    /**
     * 案件id（前端修改的时候caseId不能为空）
     */
    private String caseId;
    /**
     * 案件名称
     */
    @NotEmpty(message = "案件名称不能为空",groups = BaseGroup.Update.class)
    private String caseName;

    /**
     * 案件来源id
     **/
    private String caseSourceId;
    /**
     * 案件来源
     */
    @NotEmpty(message = "案件来源不能为空",groups = BaseGroup.Update.class)
    private String caseSource;
    /**
     * 案件来源补充来源id
     */
    private String caseSourceReplenishId;
    /**
     * 案件来源补充来源描述
     */
    private String caseSourceReplenishDesc;
    /**
     * 案件来源补充来源
     */
    private String caseSourceReplenish;
    /**
     * 案件简要情况
     **/
    @NotEmpty(message = "案件简要情况不能为空",groups = BaseGroup.Update.class)
    private String caseConciseCondition;

    /**
     * 案发时间
     **/
    @NotNull(message = "案发时间不能为空",groups = BaseGroup.Update.class)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private String caseHappenTime;


    /**
     * 移送单位统一社会信用代码
     **/
    private String transferUnitUniscid;

    /**
     * 移送单位
     **/
    private String transferUnit;
    /**
     * 移送人
     **/
    private String transferPerson;
    /**
     * 移送人手机号码
     **/
    private String transferPhone;
    /**
     * 案发地详情（完整）
     **/
    private String caseHappenAddress;
    /**
     * 案发地(中文)
     **/
    @NotNull(message = "案件地不能为空",groups = BaseGroup.Update.class)
    private String caseHappenAddressDetail;
    /**
     * 案发地区域编码
     **/
    @NotEmpty(message = "案发地区域编码不能为空",groups = BaseGroup.Update.class)
    private String caseHappenAddressAreaCode;
    /**
     * 案发地区区域名称（中文数组）
     * 新增回显参数--不做使用，仅作回显
     */
    private String[] caseHappenAddressAreaNames;

    /**
     * 办案人员列表
     */
    @NotNull(message = "办案人员不能为空",groups = BaseGroup.Update.class)
    @Valid
    private List<CaseHandlePersonInfoDto> handlePersonInfoList;
    /**
     * 案件当事人个人信息列表
     */
    private List<CaseRegisterPartiesPersonInfoDto> partiesPersonInfoList;
    /**
     * 案件当事人法人信息列表
     */
    private List<CaseRegisterPartiesLegalInfoDto> partiesLegalInfoList;
    /**
     * 案由列表信息
     */
    @NotNull(message = "案由不能为空",groups = BaseGroup.Update.class)
    @Valid
    private List<CaseReasonInfoDto> caseReasonInfoList;

    /**
     * 人设案由的ids（主键id集合）父级主键和子集主键为一个数据组，
     */
    private List<PersonReasonIds> personReasonIds;

    /**
     * 人设案由的名称（名称name集合）
     */
    private List<String> personReasonNames;

    /**
     * 条线编码
     */
    private String lineCode;
    /**
     * 条线名称
     */
    private String lineName;
    /**
     * 附件信息列表
     **/
    private List<AppendixDto> appendixList;
    /**
     * 领域编码
     */
    private String caseTerritoryCode;
    /**
     * 领域名称
     */
    private String caseTerritoryName;

    /**
     * 关联文书列表
     */
    private List<CaseRelateDocumentInfoDto> relatedDocumentList;

    /**
     * 【前端不用传】案件案由、当事人类型；1：单案由单当事人 2：多案由单当事人 3：单案由多当事人
     */
    private String casePartiesReasonType;
    /**
     * 【前端不用传】处置方式；1：合并处罚 2：分别处罚
     */
    private String handleType;
    /**
     * 【前端不用传】当事人总数
     */
    private int partiesCount;
    /**
     * 【前端不用传】案由总数
     */
    private int  caseReasonCount;
    /**
     * 【前端不用传】标准文书抬头
     */
    private String orgStandardName;
    /**
     * 【前端不用传】当事人id,","隔开
     */
    private String partyIds;
    /**
     *【后端使用】 单个法人信息
     */
    private CaseRegisterPartiesLegalInfoDto legalInfoDto;
    /**
     * 业务参数id
     */
    private String busiParamId;
    /**
     * 案件当事人个人信息列表(pdf内容)
     */
    private List<CaseRegisterPartiesPersonInfoDto> partiesPersonInfoForPdfList;
    /**
     * 案件当事人法人信息列表(pdf内容)
     */
    private List<CaseRegisterPartiesLegalInfoDto> partiesLegalInfoForPdfList;

    /**
     * 案源id
     */
    private String caseSourceRegisterId;

    /**
     * 数据来源应用id
     */
    private String caseSourceAppId;

    /**
     * 应急案由列表
     */
    private List<CaseEmergencyReasonInfoDto> caseEmergencyReasonList;

    /**
     * 应急案由名称(多案由，第一个案由+“等”)【后端使用】
     */
    private String caseEmergencyReasonName;

    /**
     * 案发时间(yyyy年M月d日) 【后端使用】
     **/
    private String caseHappenTimeStr;

    /**
     * 人设案由的名称（生成文书用）
     */
    private String personReasonName;
    /**
     * 外部行政行为码
     */
    private String  caseExternalActsCode;

    /**
     * 条线类别编码(农业农村使用)
     */
    private String lineTypeCode;
    /**
     * 条线类别名称(农业农村使用)
     */
    private String lineTypeName;

    /**
     * 案件类型：1简易程序  2普通程序  3快速办理
     */
    private String caseType;
    /**
     * 是否工商专项(0-否/1-是)
     */
    private String isIndustrialTradeSpecial;

    /**
     * 简案快办表单状态 立案暂存1 材料补充2 案件信息补充3 补充完结4
     */
    private String simpleFormType;

    /**
     * 是否预览调用 默认否 1:是 --后端使用
     */
    private String isCasePreview;

    /**
     * 简案快办当事人类型 -- 后端使用
     */
    private String fastPartyType;
    /**
     * 1 移动端数据.文书特殊处理
     */
    private String isMobile;

    /**
     * 案件转换标识 不为空 代表普通案件转换到简易案件执行下一步保存
     */
    private AppCaseConvertTemporaryEnum convertFlag;
}
